/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BasaSobol;

/**
 * Parser XML, rozszerzenie parsera z pakietu tinsiec
 * @author bąsa
 */
public class modulXML extends tinsiec.XMLModule {
    public static enum TYPY_WIADOMOSCI {
        BLEDNA,
        NOWY_UZYTKOWNIK,
        USUNIETO_UZYTKOWNIKA,
        ZWYKLA_WIADOMOSC,
        ACK,
        REG,
        PING,
        ZMIANA_STATUSU
    }

    /**
     * @return nowa wiadomość typu NOWY_UZYTKOWNIK
     */
    public static String wiadomoscONowymKliencie(String login) {
        return "<nowy><login>" + login + "</login></nowy>";
    }

    /**
     * @return nowa wiadomość typu USUNIETO_UZYTKOWNIKA
     */
    public static String wiadomoscOUsuwanymKliencie(String login) {
        return "<usun><login>" + login + "</login></usun>";
    }

    /**
     * @return nowa wiadomość typu ACK
     */
    public static String wiadomoscACK(String login, String status) {
        return "<ACK><login>" + login + "</login><status>" + status + "</status></ACK>";
    }

    public static String wiadomoscPING() {
        return "<PING/>";
    }

    /**
     * @return nowa wiadomość typu REG
     */
    public static String wiadomoscREG() {
        return "<REG></REG>";
    }

    /**
     * @return nowa wiadomość typu ZWYKLA_WIADOMOSC
     */
    public static String wiadomoscDoWyslania(String wiadomosc) {
        return "<wiadomosc>" + wiadomosc + "</wiadomosc>";
    }

    /**
     * @return nowa wiadomość typu ZMIANA_STATUSU
     */
    public static String wiadomoscZmianaStatusu(String status) {
        return "<status>" + status + "</status>";
    }

    /**
     * Funkcja używana do identyfikacji rodzaju wiadomości
     * @param wiadomosc wiadomość w odpowiednim formacie
     * @return typ wiadomości, lub BLEDNA jesli nieprawidlowy typ
     */
    public static TYPY_WIADOMOSCI typWiadomosci(String wiadomosc) {
        if(wiadomosc.startsWith("<nowy>") && wiadomosc.endsWith("</nowy>")){
            return TYPY_WIADOMOSCI.NOWY_UZYTKOWNIK;
        }
        
        if(wiadomosc.startsWith("<wiadomosc>") && wiadomosc.endsWith("</wiadomosc>")){
            return TYPY_WIADOMOSCI.ZWYKLA_WIADOMOSC;
        }
        
        if(wiadomosc.startsWith("<usun>") && wiadomosc.endsWith("</usun>")) {
            return TYPY_WIADOMOSCI.USUNIETO_UZYTKOWNIKA;
        }
        
        if(wiadomosc.startsWith("<status>") && wiadomosc.endsWith("</status>")) {
            return TYPY_WIADOMOSCI.ZMIANA_STATUSU;
        }
        
        if(wiadomosc.startsWith("<ACK>") && wiadomosc.endsWith("</ACK>")) {
            return TYPY_WIADOMOSCI.ACK;
        }
        
        if(wiadomosc.startsWith("<REG>") && wiadomosc.endsWith("</REG>")) {
            return TYPY_WIADOMOSCI.REG;
        }

        if(wiadomosc.equals("<PING/>")) {
            return TYPY_WIADOMOSCI.PING;
        }
        
        return TYPY_WIADOMOSCI.BLEDNA;
    }

    /**
     * @return login zawarty w wiadomości
     */
    public static String wyciagnijLoginZWiadomosci(String wiadomosc) {
        return wiadomosc.substring(wiadomosc.indexOf("<login>") + 7, wiadomosc.indexOf("</login>"));
    }

    /**
     * @return treść zawarta w wiadomości
     */
    public static String wyciagnijTrescZWiadomosci(String wiadomosc) {
        System.out.println(wiadomosc);
        return wiadomosc.substring(wiadomosc.indexOf("<wiadomosc>") + 11, wiadomosc.indexOf("</wiadomosc>"));
    }

    /**
     * @return status zawarty w wiadomości
     */
    public static String wyciagnijStatusZWiadomosci(String wiadomosc) {
        return wiadomosc.substring(wiadomosc.indexOf("<status>") + 8, wiadomosc.indexOf("</status>"));
    }
}
